#include<iostream>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>

using namespace std;

int main()
{
  pid_t id =fork();
  if(id < 0)
  {
    cout << "创建子进程失败" << endl;
    exit(1);
  }
  else if(id == 0)
  {
    int cnt = 5;
    while(cnt)
    {
      cout << "我是子进程，我的pid:" << getpid() << "我的ppid：" << getppid() << endl;
      sleep(1);
      cnt--;
    }
    exit(30);//进程退出，返回退出码30
  }
  else
  {
      cout << "我是父进程，我的pid:" << getpid() << "我的ppid：" << getppid() << endl;
      sleep(5);
      //wait(nullptr);
      int status = 0;//status是输出型参数
      int ret = waitpid(id, &status, 0);//0表示阻塞式的等待
      //第一个参数是等待进程的pid，也可以是-1表示任何进程
      if(ret>0)
      {
        printf("等待成功:%d 进程收到的信号：%d 子进程退出码：%d \n",ret, status&0x7F, (status>>8)&0xFF);
        //status是一个32位的整型，次低8位表示进程退出码，低7位表示进程收到的信号
      }
  }  
  return 0;
}
